﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<windows.h>

//int main()
//{
//    //1-10
//    int i = 0;
//    for (i = 1; i <= 10; i++)  //三个表达式分别代表初始化，判断条件，调整条件
//    {
//        printf("%d\n", i);
//    }
//    return 0;
//}

//对于for循环，我们建议
//1.不可在for循环体内修改循环变量，防止for循环失去控制
//2.建议for循环语句的循环控制变量的取值采取"前闭后开"区间写法

//int main()
//{
    //for循环的三个表达式均可省略
    //如果把判断部分省略了，就意味着判断恒为真，建议不要轻易的省略
    
    //int i = 0;
    //int j = 0;
    //for (; i < 3; i++)
    //    for (; j < 3; j++)
    //        printf("hehe\n");   //结果3个hehe

    //for (int i = 0; i < 3; i++)
    //    for (int j = 0; j < 3; j++)
    //        printf("hehe\n");   //结果9个hehe
    //return 0;
    //上面两种写法打印结果不同，如果不是很熟练的情况下不要省略循环条件
//}

//int main()
//{
//    int i = 0;
//    int k = 0;
//    for (i = 0, k = 0; k = 0; i++, k++)  //不会循环，无打印结果
//        //判断语句为k=0，意思是将k的值赋为0，表达式为假，不会进入循环
//        //如果k=1,就是表达式恒为真，是死循环
//        k++;
//    return 0;
//}

//do...while循环至少执行一次
//使用do...while循环打印1-10
//int main()
//{
//    int i = 1;
//    do {
//        if (i == 5)
//           // break;  //打印结果1.2.3.4,遇到break程序就结束了
//           continue; //打印结果1.2.3.4.（4打印完光标闪烁）
//        //因为执行了continue后不执行后面的打印和++语句，i一直是5，死循环了
//        printf("%d\n", i);
//        i++;
//    } while (i <= 10);      
//    return 0;
//}

//练习，计算n的阶乘

//INT_MAX;表示定义好的最大值，不要超过
//int main()
//{
//    int n; //不考虑溢出
//    int ret = 1;
//    scanf("%d", & n);
//    for (int i = 1; i <= n; i++)
//    {
//        ret *= i;
//    }
//    printf("%d\n", ret);
//    return 0;
//}

//计算 1!+2!+3!+……+10!
//int main()
//{
//    int i,n,sum=0; //不考虑溢出
//    int ret = 1; 
//    for (n= 1; n<=3; i++)
//    {
//        ret = 1;//防止每次ret值都是上次积累计算出来的
//        for(i=1;i<=n;i++)
//        {
//            ret *= i;
//        }
//        sum += ret;
//    }
//    printf("%d\n", sum);
//    return 0;
//}
//优化写法
//int main()
//{
//    int n, sum = 0; //不考虑溢出
//    int ret = 1;
//    for (n = 1; n <= 3; n++)
//    {
//        ret *= n;   //每个的阶乘
//        sum += ret;
//    }
//    printf("%d\n", sum);
//    return 0;
//}


//在一个有序数组中查找某个数字

//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };  
//	int k = 5;  //要查找的数字
//	int i = 0;
//	int flag = 0;  //未找到的标志
//	int sz = sizeof(arr) / sizeof(arr[0]);//strlen求字符串长度，这是数组不能用
//	for (i = 0; i < sz; i++)
//	{
//		if (k == arr[i])
//		{
//			flag = 1;
//			printf("%d", i + 1);
//		}
//	}
//	if (flag == 0)
//		printf("找不到\n");
//	return 0;
//}

//折半（二分）查找，要求数组有序
//int main()
//{
//    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//    int left = 0;
//    int right = sizeof(arr) / sizeof(arr[0]) - 1;
//    int key = 7;
//    int mid = 0;
//    while (left <= right)
//    {
//        //int mid = (left + right) / 2;  //这样写有点问题，如果left和right过大，会造成溢出,求得的mid不正确
//        mid = left + (right - left) / 2;
//        if (arr[mid] > key)
//        {
//            right = mid - 1;
//        }
//        else if (arr[mid] < key)
//        {
//            left = mid + 1;
//        }
//        else
//            break;
//    }
//    if (left <= right)
//        printf("找到了,下标是%d\n", mid);
//    else
//        printf("找不到\n");
//}


//编写代码，演示多个字符从两端移动，向中间汇聚
//int main()
//{
//	char arr1[] = "welcome to bit!!!";
//	char arr2[] = "*****************";
//    int left = 0;
//    int right = strlen(arr1) - 1;
//    printf("%s\n", arr2);
//    while循环实现
//    while (left <= right)
//    {
//        arr2[left] = arr1[left];
//        arr2[right] = arr1[right];
//        printf("%s\n", arr2);
//        Sleep(1000);  //休眠
//        system("cls");//清屏
//       left++;
//       right--;
//    }
//     printf("%s\n", arr2); 
//    return 0;
//}

//void menu()
//{
//    printf("**********************************\n");
//    printf("*********** 1.play     **********\n");
//    printf("*********** 0.exit     **********\n");
//    printf("**********************************\n");
//}
//RAND_MAX--rand函数能返回随机数的最大值。
//void game()
//{
//    int random_num = rand() % 100 + 1;//0-99+1->1-100
//    int input = 0;
//    while (1)
//    {
//        printf("请输入猜的数字>:");
//        scanf("%d", &input);
//        if (input > random_num)
//        {
//            printf("猜大了\n");
//        }
//        else if (input < random_num)
//        {
//            printf("猜小了\n");
//        }
//        else
//        {
//            printf("恭喜你，猜对了\n");
//            break;
//        }
//    }
//}
//int main()
//{
//    int input = 0;
//    srand((unsigned)time(NULL));    //使用随机数前要调用srand函数，设置随机数的生成器
//    do
//    {
//        menu();
//        printf("请选择>:");
//        scanf("%d", &input);
//        switch (input)
//        {
//        case 1:
//            game();
//            break;
//        case 0:
//            break;
//        default:
//            printf("选择错误,请重新输入!\n");
//            break;
//        }
//    } while (input);
//    return 0;
//}

//编写程序数一下 1到 100 的所有整数中出现多少个数字9
//int main()
//{
//    int i = 0,count=0;
//    for (i = 1; i < 101; i++)
//    {
//        if (i % 10 == 9||i/10==9)
//            count++;
//    }
//    printf("%d\n", count+1);
//    return 0;
//}


//编写代码在一个整形有序数组中查找具体的某个数
//要求：找到了就打印数字所在的下标，找不到则输出：找不到。
//int main()
//{
//    int arr[] = {1,2,3,4,5,6,7,8,9,10};
//    int n = sizeof(arr) / sizeof(arr[0]);
//    int k = 8;
//    int low = 0;
//    int high = n - 1;
//    int flag = 0;
//    while (low <= high)
//    {
//        int mid = low + (high - low) / 2;
//        if (arr[mid] < k)
//        {
//            low = mid + 1;
//        }
//        else if (arr[mid] > k)
//        {
//            high = mid - 1;
//        }
//        else
//        {
//            printf("找到了，下标为:%d\n", mid);
//            flag = 1;
//            break;
//        }
//    }
//    if (flag == 0)
//        printf("找不到\n");
//    return 0;
//}

//求10 个整数中最大值
//int main()
//{
//    int i;
//    int arr[20] = { 0 };
//    for (i = 0; i < 10; i++)
//    {
//        scanf("%d",& arr[i]);
//    }
//    int max = arr[0];
//    for (i = 0; i < 10; i++)
//    {
//        if (arr[i] > max)
//            max = arr[i];
//    }
//    printf("最大值为:%d\n", max);
//    return 0;
//}

//分数求和，计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值，打印出结果
//int main()
//{
//    double ret;
//    int i;
//    double sum = 0.0;
//    for (i = 1; i < 101; i++)
//    {
//        ret = 1.0 / i;
//        if (i % 2 == 1)
//            sum+= ret;
//        else
//            sum += -ret;
//    }
//    printf("%lf\n", sum);
//    return 0;
//}

//int main()
//{
//    double ret=1.0;
//    int i;
//    double sum = 0.0;
//    for (i = 1; i < 101; i++)
//    {
//        sum += ret * 1.0 / i;
//        ret = -ret;
//    }
//    printf("%lf\n", sum);
//    return 0;
//}

//int main()
//{
//    double ret = 1.0;
//    int i;
//    double sum = 0.0;
//    for (i = 1; i < 101; i++)
//    {
//        sum += 2 * (i % 2 - 0.5) / i;
//    }
//    printf("%lf\n", sum);
//    return 0;
//}

//猜数字游戏
//#include <stdlib.h>
//#include <time.h>
//void menu()
//{
//    printf("************************\n");
//    printf("*****       1.play            ******\n");
//    printf("*****       0.exit             ******\n");
//    printf("************************\n");
//}
//void game()
//{
//    int random = rand()%100+1;
//    int input;
//    while (1)
//    {
//        printf("请输入猜的数字:");
//        scanf("%d", &input);
//        if (input > random)
//            printf("猜大了\n");
//        else if (input < random)
//            printf("猜小了\n");
//        else
//        {
//            printf("恭喜你，猜对了\n");
//            break;
//        }
//    }
//}
//
//int main()
//{
//    srand((unsigned)time(NULL));
//    int input;
//    do {
//        menu();
//        printf("请选择:>");
//        scanf("%d", &input);
//        switch (input)
//        {
//        case 1:
//            game();
//            break;
//        case 0:
//            break;
//        default:
//            printf("选择错误,请重新输入!\n");
//            break;
//        }
//    } while (input);
//    return 0;
//}

//在屏幕上输出9*9乘法口诀表
//int main()
//{
//    int i=0,j=0;
//    for (i = 1; i <= 9; i++)
//    {
//        for (j = 1; j <= i; j++)
//        {
//            printf("%d*%d=%d ", i, j, i * j);
//        }
//        printf("\n");
//    } 
//    return 0;
//}